<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE xsl:stylesheet SYSTEM "lang://system">

<xsl:stylesheet
	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	
	<!-- Thanks to fb3.habrahabr.ru -->
	
	<xsl:template match="pages" mode="pages-navigation">
     <xsl:param name="href" />
     <xsl:param name="queryString" />
     
     <div class="pages_navigation"> 
          
     <xsl:call-template name="page-numbers">
       <xsl:with-param name="total-results" select="total"/>
       <xsl:with-param name="results-per-page" select="onpage"/>
       <xsl:with-param name="max-from-current-page" select="4"/>
       <xsl:with-param name="current-page" select="page"/>
       <xsl:with-param name="href" select="$href" />
       <xsl:with-param name="queryString" select="$queryString" />
     </xsl:call-template>
     
     </div>
	 
	</xsl:template>
	  
	<xsl:template name="page-numbers">
	   <xsl:param name="total-results"/>
	   <xsl:param name="results-per-page"/>
       <xsl:param name="max-from-current-page"/>
       <xsl:param name="current-page"/>
       <xsl:param name="href"/>
       <xsl:param name="queryString" />
  
     <!-- Сколько всего страниц имеем -->
     <xsl:variable name="max-page" select="ceiling($total-results div $results-per-page)"/>
  
     <!-- Если страниц больше одной, то выводим номера страниц -->
     <xsl:if test="1 &lt; $max-page">
       <!-- С какой страницы начинать вывод номеров страниц -->
       <xsl:variable name="from-page">
         <xsl:choose>
           <!-- Если номер текущей страницы больше, чем максимальная удаленность -->
           <xsl:when test="$current-page &gt; $max-from-current-page">
             <!-- То первой будет страница, удаленная на заданное число страниц от текущей -->
            <xsl:value-of select="$current-page - $max-from-current-page"/>
           </xsl:when>
           <xsl:otherwise>1</xsl:otherwise>
         </xsl:choose>
       </xsl:variable>
  
       <!-- Какой страницей заканчивать вывод номеров страниц -->
       <xsl:variable name="to-page">
         <xsl:choose>
           <!-- Если номер текущей страницы удален от номера последней страницы больше, чем максимальная удаленность -->
           <xsl:when test="$max-page - $current-page &gt; $max-from-current-page">
             <!-- То последней будет страница, удаленная на заданное число страниц от текущей -->
             <xsl:value-of select="$current-page + $max-from-current-page"/>
           </xsl:when>
           <xsl:otherwise>
             <xsl:value-of select="$max-page"/>
           </xsl:otherwise>
         </xsl:choose>
       </xsl:variable>
  
  	<div class="move">
       <div class="prev">
			<xsl:text>← </xsl:text>
			<xsl:choose>
				<xsl:when test="$current-page = 1">
					<xsl:text>&labelPagesNext;</xsl:text>
				</xsl:when>
				<xsl:otherwise>
					<a href="{$href}/page{$current-page - 1}{$queryString}">&labelPagesNext;</a>
				</xsl:otherwise>
			</xsl:choose>
	   </div>
	   <div class="next">
	   		<xsl:choose>
	   			<xsl:when test="$max-page != $current-page">
	   				 <a href="{$href}/page{$current-page + 1}{$queryString}">&labelPagesBack;</a>
	   			</xsl:when>
	   			<xsl:otherwise>
	   				<xsl:text>&labelPagesBack;</xsl:text>
	   			</xsl:otherwise>
	   		</xsl:choose>
	   		<xsl:text> →</xsl:text>
	   </div>
	</div>
  	<div class="pages">
       <!-- Вызываем шаблон номеров страниц с начальными значениями -->
      <xsl:call-template name="page-number">
         <xsl:with-param name="max-page-number" select="$to-page"/>
         <xsl:with-param name="current-number" select="$from-page"/>
         <xsl:with-param name="current-page" select="$current-page"/>
        <xsl:with-param name="href" select="$href"/>
        <xsl:with-param name="queryString" select="$queryString" />
       </xsl:call-template>
     </div>
     </xsl:if>
   </xsl:template>
  
   <xsl:template name="page-number">
     <xsl:param name="max-page-number"/>
     <xsl:param name="current-number"/>
     <xsl:param name="current-page"/>
     <xsl:param name="href"/>
     <xsl:param name="queryString" />
  
     <xsl:choose>
       <!-- Если выводим номер текущей страницы, то без ссылки -->
       <xsl:when test="$current-number = $current-page">
          <a class="selected" href="{$href}/page{$current-number}{$queryString}">
           <xsl:value-of select="$current-number"/>
          </a>
       </xsl:when>
       <!-- Номера остальных страниц со ссылкой -->
       <xsl:otherwise>
         <a href="{$href}/page{$current-number}{$queryString}">
           <xsl:value-of select="$current-number"/>
         </a>
       </xsl:otherwise>
     </xsl:choose>
  
     <!-- Если текущий номер не последний, то вызываем шаблон вывода следующего номера -->
     <xsl:if test="$current-number &lt; $max-page-number">
       <xsl:call-template name="page-number">
        <xsl:with-param name="max-page-number" select="$max-page-number"/>
         <xsl:with-param name="current-number" select="$current-number + 1"/>
         <xsl:with-param name="current-page" select="$current-page"/>
         <xsl:with-param name="href" select="$href"/>
         <xsl:with-param name="queryString" select="$queryString" />
       </xsl:call-template>
     </xsl:if>
   </xsl:template>
</xsl:stylesheet>